import request from '@/utils/request/req';

/**
 * 分页参数接口
 */
export interface PageParams {
  current: number; // 当前页码，从1开始
  size: number; // 每页记录数
}

/**
 * 客户池数据结构
 */
export interface CustomerPool {
  id?: number; // 客户池主键ID
  shopName?: string; // 店铺名称
  orderNo?: string; // 订单编号
  buyerNick?: string; // 买家昵称
  receiverName?: string; // 收件人姓名
  receiverPhone?: string; // 收件人手机号
  virtualPhone?: string; // 虚拟手机号
  receiverProvince?: string; // 收件人省份
  receiverCity?: string; // 收件人城市
  receiverDistrict?: string; // 收件人区县
  receiverAddress?: string; // 收件人详细地址
  orderTime?: Date | string; // 下单时间
  expressNo?: string; // 快递单号
  paidAmount?: number; // 实付金额
  productName?: string; // 商品名称
  productId?: string; // 商品ID
  productAbbr?: string; // 商品简称
  productSkuCode?: string; // 商品规格商家编码
  productSpec?: string; // 商品规格
  productSpecAbbr?: string; // 商品规格简称
  productSpecCode?: string; // 商品商家编码
  quantity?: number; // 购买数量
  unitPrice?: number; // 单价
  subOrderStatus?: string; // 子订单状态
  printTime?: Date | string; // 打印时间
  weight?: number; // 重量
  volume?: number; // 体积
  accountId?: string; // 账号ID
  createTime?: Date; // 创建时间
  status?: string; // 状态（1待添加 2添加中 3添加成功 4添加失败）
  type?: string; // 类型（1 新增客户池 2 客户流失池）
  wxId?: string; // 微信id
  accountType?: string; // 公司唯一标识
  message?: string; // 移交原因说明（从客户池移交到流失池时的备注信息）
}

/**
 * 分页响应数据结构
 */
export interface PageResponse<T> {
  records: T[]; // 数据列表
  total: number; // 总记录数
  size: number; // 每页记录数
  current: number; // 当前页码
  pages: number; // 总页数
}

/**
 * 客户池查询参数
 */
export interface CustomerPoolQueryParams extends PageParams {
  shopName?: string; // 店铺名称
  orderNo?: string; // 订单编号
  buyerNick?: string; // 买家昵称
  receiverName?: string; // 收件人姓名
  receiverPhone?: string; // 收件人手机号
  wxId?: string; // 微信id
  status?: string; // 状态（1待添加 2添加中 3添加成功 4添加失败）
  type?: string; // 类型（1 新增客户池 2 客户流失池）
  accountType?: string; // 公司唯一标识
}

/**
 * 部门信息数据结构
 */
export interface Department {
  deptId?: number | string; // 部门ID
  parentId?: number | string; // 父部门ID
  parentName?: string; // 父部门名称
  ancestors?: string; // 祖级列表
  deptName?: string; // 部门名称
  orderNum?: number; // 显示顺序
  leader?: string; // 负责人
  phone?: string; // 联系电话
  email?: string; // 邮箱
  status?: string; // 部门状态
  createTime?: string; // 创建时间
}

/**
 * 角色信息数据结构
 */
export interface Role {
  roleId?: number | string; // 角色ID
  roleName?: string; // 角色名称
  roleKey?: string; // 角色权限字符串
  roleSort?: number; // 显示顺序
  dataScope?: string; // 数据范围
  menuCheckStrictly?: boolean; // 菜单树选择项是否关联显示
  deptCheckStrictly?: boolean; // 部门树选择项是否关联显示
  status?: string; // 角色状态
  remark?: string; // 备注
  createTime?: string; // 创建时间
  flag?: boolean; // 标志
  superAdmin?: boolean; // 是否超级管理员
}

/**
 * 用户信息数据结构
 */
export interface User {
  userId?: number | string; // 用户ID
  tenantId?: number | string; // 租户ID
  deptId?: number | string; // 部门ID
  userName?: string; // 用户名
  userPlan?: string; // 用户计划
  nickName?: string; // 昵称
  userType?: string; // 用户类型
  email?: string; // 邮箱
  phonenumber?: string; // 手机号
  sex?: string; // 性别
  avatar?: string; // 头像
  wxAvatar?: string; // 微信头像
  password?: string; // 密码
  status?: string; // 状态
  loginIp?: string; // 最后登录IP
  loginDate?: string; // 最后登录时间
  remark?: string; // 备注
  createTime?: string; // 创建时间
  dept?: Department; // 部门信息
  domainName?: string; // 域名
  roles?: Role[]; // 角色列表
  roleIds?: number[]; // 角色ID列表
  postIds?: number[]; // 岗位ID列表
  roleId?: number; // 角色ID
  userGrade?: string; // 用户等级
  userBalance?: number; // 用户余额
}

/**
 * 获取客户池列表
 * @param params 查询参数
 * @returns 返回分页数据，包含客户池列表
 */
export const getCustomerPoolList = (params: CustomerPoolQueryParams) => {
  return request.get<PageResponse<CustomerPool>>('/msg/customerPool/list', { params });
};

/**
 * 获取客户池详情
 * @param id 客户池主键ID
 * @returns 返回客户池详细信息
 */
export const getCustomerPoolDetail = (id: number) => {
  return request.get<CustomerPool>(`/msg/customerPool/${id}`);
};

/**
 * 新增客户池
 * @param data 客户池数据
 * @returns 返回操作结果
 */
export const addCustomerPool = (data: Omit<CustomerPool, 'id' | 'createTime'>) => {
  return request.post('/msg/customerPool/add', data);
};

/**
 * 编辑客户池
 * @param data 客户池数据
 * @returns 返回操作结果
 */
export const updateCustomerPool = (data: CustomerPool) => {
  return request.post('/msg/customerPool/update', data);
};

/**
 * 删除客户池
 * @param data 删除参数
 * @param data.id 客户池主键ID
 * @returns 返回操作结果
 */
export const deleteCustomerPool = (data: { id: number }) => {
  return request.post('/msg/customerPool/delete', data);
};

/**
 * 客户池导入
 * @param file 导入文件
 * @returns 返回导入结果
 */
export const importCustomerPool = (file: File) => {
  const formData = new FormData();
  formData.append('file', file);

  return request.post('/msg/customerPool/import', formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });
};

/**
 * 客户池分配
 * @param data 分配参数
 * @param data.ids 客户池主键ID列表，逗号分隔
 * @param data.accountIds 账号ID列表，逗号分隔
 * @returns 返回分配结果
 */
export const allocateCustomerPool = (data: { ids: string; accountIds: string }) => {
  return request.post('/msg/customerPool/allocation', data);
};

/**
 * 重置分配人
 * @param data 重置参数
 * @param data.ids 客户池主键ID列表，逗号分隔（空字符串表示全部重置）
 * @param data.accountIds 账号ID列表，逗号分隔
 * @returns 返回重置结果
 */
export const resetAllocation = (data: { ids: string; accountIds: string }) => {
  return request.post('/msg/customerPool/resetAllocation', data);
};

/**
 * 批量添加微信好友
 * @param data 批量添加参数
 * @param data.ids 客户池主键ID列表，逗号分隔
 * @param data.wxId 微信id
 * @param data.message 验证消息（可选）
 * @returns 返回批量添加结果
 */
export const batchAddWxFriend = (data: { ids: string; wxId: string; message?: string }) => {
  return request.post('/msg/customerPool/addWxFind', data);
};

/**
 * 客户池移交到流失池
 * @param data 移交参数
 * @param data.ids 客户池主键ID列表，逗号分隔
 * @param data.type 类型（2 客户流失池）
 * @param data.wxId 微信ID（可选）
 * @param data.message 移交原因说明（可选）
 * @returns 返回操作结果
 */
export const moveToLossPool = (data: { ids: string; type: string; wxId?: string; message?: string }) => {
  return request.post('/msg/customerPool/updateType', data);
};

/**
 * 流失池移交到客户池
 * @param data 移交参数
 * @param data.ids 客户池主键ID列表，逗号分隔
 * @param data.type 类型（1 新增客户池）
 * @param data.wxId 微信ID（可选）
 * @returns 返回操作结果
 */
export const moveToCustomerPool = (data: { ids: string; type: string; wxId?: string }) => {
  return request.post('/msg/customerPool/adminUpdateType', data);
};

/**
 * 获取分配客户的用户列表
 * @returns 返回可分配的用户列表
 */
export const getAssignableUsers = () => {
  return request.get<User[]>('/enterprise/customerPool/getUser');
};

/**
 * 客户池日志数据结构
 */
export interface CustomerPoolLog {
  id?: number; // 日志ID
  poolId?: number; // 客户池ID
  accountId?: number; // 账号ID
  wxId?: string | null; // 微信ID
  remark?: string; // 备注/操作详情
  type?: string; // 操作类型（1: 添加操作, 2: 转移到失败客户池）
  createTime?: string; // 创建时间
  accountName?: string; // 操作人姓名
}

/**
 * 客户池统计数据结构
 */
export interface CustomerPoolStatistics {
  addCount?: string; // 添加次数
  addFailedCount?: string; // 添加失败次数
  transferCount?: string; // 流转次数
}

/**
 * 客户池日志响应数据结构
 */
export interface CustomerPoolLogsResponse {
  page: PageResponse<CustomerPoolLog>; // 分页日志数据
  statistics: CustomerPoolStatistics; // 统计数据
}

/**
 * 获取客户池日志列表
 * @param poolId 客户池ID
 * @returns 返回日志列表和统计数据
 */
export const getCustomerPoolLogs = (poolId: number) => {
  return request.get<CustomerPoolLogsResponse>('/msg/customerPoolLogs/list', {
    params: { poolId }
  });
};

/**
 * 获取客户池总条数
 * @param params 查询参数（与列表查询参数相同）
 * @returns 返回总条数
 */
export const getCustomerPoolSum = (params: CustomerPoolQueryParams) => {
  return request.post<number>('/msg/customerPool/getSum', params);
};

/**
 * 客户池日志新增参数接口
 */
export interface AddCustomerPoolLogParams {
  poolId: number; // 当前数据主键
  type: number; // 固定传4
  wxId: string; // 当前操作人微信id
  remark: string; // 备注
}

/**
 * 新增客户池日志
 * @param params 新增参数
 * @param params.poolId 当前数据主键
 * @param params.type 固定传4
 * @param params.wxId 当前操作人微信id
 * @param params.remark 备注
 * @returns 返回新增结果
 */
export const addCustomerPoolLog = (params: AddCustomerPoolLogParams) => {
  return request.post('/msg/customerPoolLogs/add', params);
};
